home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM B4 / PD-ROM B4.iso / Entertainment / Strategy / Robots / bot 1.0.1 / Tutorial / ASM / Suicide < prev    next >
Text File  |  1991-06-25  |  2KB  |  107 lines

  1. !
  2. ! Suicide
  3. !
  4. ! This bot looks for other bots much like Bomber, except that
  5. ! when it sees another bot, it turns on its shield and charges
  6. ! at it full tilt.
  7. !
  8.  
  9. #DATA
  10.  
  11. EQU incr 23
  12.  
  13. DEF SCN
  14. DEF XX
  15. DEF YY
  16. DEF DAMAGE
  17. DEF XVEL
  18. DEF YVEL
  19.  
  20. #CODE ASM
  21.     
  22.     RND 360, SCN
  23.     MOV D0, DAMAGE
  24.     RND 200, XX
  25.     ADD 25, XX
  26.     RND 200, YY
  27.     ADD 25, YY
  28.  
  29. :LOOP
  30.     CMP D0, DAMAGE
  31.     BEQ CONTINUE_LOOP
  32.     JSR MOVEAWAY
  33. :CONTINUE_LOOP
  34.     ADD INCR, SCN
  35.     SCN SCN
  36.     CMP S0, 0
  37.     BEQ LOOP
  38.     
  39.     JSR ATTACK
  40.     JSR MOVEAWAY
  41.     JMP LOOP
  42.     
  43. ! In order to move at a given angle (here, the angle to the
  44. ! enemy bot), set velocity to (cos(angle), sin(angle)).
  45.  
  46. :ATTACK
  47.     COS S1
  48.     MOV R0, XVEL                ! Results of math fns are in R0
  49.     SIN S1
  50.     VEL XVEL, R0
  51.     SHL 1                       ! Turn on force shield
  52. :ALOOP
  53.     CMP X1, 0
  54.     BNE ALOOP
  55.     CMP Y1, 0
  56.     BNE ALOOP
  57.     
  58. :endattack
  59.     SHL 0                       ! Turn off force shield
  60.     RET
  61.  
  62. ! The following subroutine is a bit different than the previous
  63. ! movement routines.  Instead of moving *to* a point in the
  64. ! arena, the bot moves *toward* a point for 20 ticks.  This
  65. ! risks smashing into walls (as the bot doesn't slow down), but
  66. ! it's easier to write than the other routine, and the bot
  67. ! won't completely choke if its treads are destroyed (as Bomber
  68. ! will -- it goes into an infinite loop trying to move to the
  69. ! specified point when the bot can no longer move at all).
  70.  
  71. :moveaway
  72.     NEG X0, XVEL
  73.     SUB XX, XVEL
  74.     MUL 10, XVEL
  75.     NEG Y0, YVEL
  76.     SUB YY, YVEL
  77.     MUL 10, YVEL
  78.     VEL XVEL, YVEL
  79.     NOP                 ! A quickie way to wait for 20 ticks
  80.     NOP
  81.     NOP
  82.     NOP
  83.     NOP
  84.     NOP
  85.     NOP
  86.     NOP
  87.     NOP
  88.     NOP
  89.     NOP
  90.     NOP
  91.     NOP
  92.     NOP
  93.     NOP
  94.     NOP
  95.     NOP
  96.     NOP
  97.     NOP
  98.     NOP
  99.     VEL 0, 0
  100.     MOV D0, DAMAGE
  101.     RND 200, XX             ! Compute the new target point
  102.     ADD 25, XX
  103.     RND 200, YY
  104.     ADD 25, YY
  105.     RET
  106.  
  107. #END